package com.lgit.Model4.hw03;

import java.io.*;

public class ThreadCopyFile implements Runnable{
    @Override
    public void run() {
        copyDir("d:/01Model4Hw03Test", "d:/000newCopyFile");
    }

    public static void copyDir(String filePath1, String filePath2) {
        File sourceFile = new File(filePath1);  // 源文件，被拷贝的文件
        File copyFile = new File(filePath2);    // 目标文件，拷贝完的文件
        if (!copyFile.exists()) {
            // 如果目标文件不存在，创建多级目录
            copyFile.mkdirs();
        }
        File[] files = sourceFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                // 如果源文件是一个文件，调用文件拷贝的方法，将文件拷贝到目标文件的目录下
                copyFile(files[i].getAbsolutePath(), filePath2 + "/" + files[i].getName());
            } else {
                // 如果是一个文件夹，拷贝源文件的路径到目标文件的文件夹中
                copyDir(files[i].getAbsolutePath(), filePath2 + "/" + files[i].getName());
            }
        }
    }

    public static void copyFile(String filePath1, String filePath2) {
        // 分别创建换成输入输出流的对象，并执行相关异常的处理
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(filePath1));
            bos = new BufferedOutputStream(new FileOutputStream(filePath2));
            byte[] bArr = new byte[1024]; // 创建缓冲区
            int res;
            while ((res = bis.read(bArr)) != -1) {
                // 执行文件拷贝
                bos.write(bArr, 0, res);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关流，释放资源
            if (null != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != bis) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
